IzpÄtiet digitÄlÄ audio pasauli ar Python. Å is visaptveroÅ”ais ceļvedis aptver skaÅas analÄ«zi un sintÄzi, galvenÄs bibliotÄkas kÄ Librosa un SciPy, un praktiskus kodu piemÄrus izstrÄdÄtÄjiem un entuziastiem.
Python audio apstrÄde: PadziļinÄts ieskats skaÅas analÄ«zÄ un sintÄzÄ
SkaÅa ir cilvÄka pieredzes neatÅemama sastÄvdaļa. No mÅ«zikas, ko mÄ«lam, lÄ«dz balsÄ«m, ko atpazÄ«stam, un mÅ«su vides fona trokÅ”Åiem, audio dati ir bagÄtÄ«gi, sarežģīti un dziļi nozÄ«mÄ«gi. DigitÄlajÄ laikmetÄ spÄja manipulÄt un saprast Å”os datus ir kļuvusi par kritisku prasmi tik dažÄdÄs jomÄs kÄ izklaide, mÄkslÄ«gais intelekts un zinÄtniskÄ pÄtniecÄ«ba. IzstrÄdÄtÄjiem un datu zinÄtniekiem Python ir kļuvis par spÄcÄ«gu rÄ«ku Å”im uzdevumam, piedÄvÄjot stabilu bibliotÄku ekosistÄmu digitÄlajai signÄlu apstrÄdei (DSP).
Audio apstrÄdes pamatÄ ir divas viena otru papildinoÅ”as disciplÄ«nas: skaÅas analÄ«ze un skaÅas sintÄze. TÄs ir digitÄlÄ audio iÅ un jaÅ:
- AnalÄ«ze ir dekonstrukcijas process. Tas ietver esoÅ”a audio signÄla paÅemÅ”anu un tÄ sadalīŔanu, lai iegÅ«tu nozÄ«mÄ«gu informÄciju. TÄ atbild uz jautÄjumu: "No kÄ Å”Ä« skaÅa sastÄv?"
- SintÄze ir konstrukcijas process. Tas ietver audio signÄla radīŔanu no nulles, izmantojot matemÄtiskus modeļus un algoritmus. TÄ atbild uz jautÄjumu: "KÄ es varu radÄ«t Å”o skaÅu?"
Å is visaptveroÅ”ais ceļvedis aizvedÄ«s jÅ«s ceļojumÄ cauri abÄm pasaulÄm. MÄs izpÄtÄ«sim teorÄtiskos pamatus, iepazÄ«stinÄsim ar bÅ«tiskiem Python rÄ«kiem un iziesim cauri praktiskiem koda piemÄriem, kurus varÄsiet paÅ”i palaist un pielÄgot. NeatkarÄ«gi no tÄ, vai esat datu zinÄtnieks, kurÅ” vÄlas analizÄt audio iezÄ«mes, mÅ«ziÄ·is, kurÅ” interesÄjas par algoritmisko kompozÄ«ciju, vai izstrÄdÄtÄjs, kurÅ” veido nÄkamo lielisko audio lietojumprogrammu, Å”is raksts sniegs jums nepiecieÅ”amo pamatu, lai sÄktu darbu.
1. daļa: Dekonstrukcijas mÄksla: SkaÅas analÄ«ze ar Python
SkaÅas analÄ«ze ir lÄ«dzÄ«ga detektÄ«va darbam. Jums tiek dots pierÄdÄ«jums ā audio fails ā un jÅ«su uzdevums ir izmantot savus rÄ«kus, lai atklÄtu tÄ noslÄpumus. KÄdas notis tika nospÄlÄtas? Kas runÄja? KÄdÄ vidÄ skaÅa tika ierakstÄ«ta? Å ie ir jautÄjumi, uz kuriem skaÅas analÄ«ze palÄ«dz mums atbildÄt.
DigitÄlÄ audio pamatjÄdzieni
Pirms mÄs varam analizÄt skaÅu, mums ir jÄsaprot, kÄ tÄ tiek attÄlota datorÄ. Analogs skaÅas vilnis ir nepÄrtraukts signÄls. Lai to saglabÄtu digitÄli, mums tas jÄpÄrveido procesÄ, ko sauc par diskretizÄciju (sampling).
- DiskretizÄcijas frekvence: Tas ir audio signÄla paraugu (momentuzÅÄmumu) skaits, kas tiek Åemts sekundÄ. To mÄra hercos (Hz). IzplatÄ«ta diskretizÄcijas frekvence mÅ«zikai ir 44 100 Hz (44,1 kHz), kas nozÄ«mÄ, ka katru sekundi tiek uzÅemti 44 100 skaÅas amplitÅ«das momentuzÅÄmumi.
- Bitu dziļums: Tas nosaka katra parauga izŔķirtspÄju. LielÄks bitu dziļums nodroÅ”ina lielÄku dinamisko diapazonu (atŔķirÄ«bu starp klusÄkajÄm un skaļÄkajÄm skaÅÄm). 16 bitu dziļums ir standarts kompaktdiskiem.
Å Ä« procesa rezultÄts ir skaitļu secÄ«ba, ko mÄs varam attÄlot kÄ viļÅa formu.
ViļÅa forma: AmplitÅ«da un laiks
VisvienkÄrÅ”Äkais audio attÄlojums ir viļÅa forma. Tas ir divdimensiju grafiks, kurÄ attÄlota amplitÅ«da (skaļums) attiecÄ«bÄ pret laiku. AplÅ«kojot viļÅa formu, var gÅ«t vispÄrÄju priekÅ”statu par audio dinamiku, bet tas daudz nepasaka par tÄ tonÄlo saturu.
Spektrs: Frekvence un toÅa augstums
Lai izprastu skaÅas tonÄlÄs Ä«paŔības, mums jÄpÄriet no laika domÄna (viļÅa formas) uz frekvenÄu domÄnu. To panÄk, izmantojot algoritmu, ko sauc par Ätro FurjÄ transformÄciju (Fast Fourier Transform - FFT). FFT sadala viļÅa formas segmentu tÄ sastÄvdaļÄs ā sinusa viļÅos, katram ar noteiktu frekvenci un amplitÅ«du. RezultÄts ir spektrs ā amplitÅ«das grafiks attiecÄ«bÄ pret frekvenci. Å is grafiks atklÄj, kuras frekvences (vai toÅu augstumi) ir sastopamas skaÅÄ un cik stipras tÄs ir.
Tembrs: SkaÅas "krÄsa"
KÄpÄc klavieres un Ä£itÄra, spÄlÄjot vienu un to paÅ”u noti (vienu un to paÅ”u pamatfrekvenci), skan tik atŔķirÄ«gi? Atbilde ir tembrs. Tembru nosaka harmoniku jeb virsstoÅu ā papildu frekvenÄu, kas ir pamatfrekvences vesela skaitļa reizinÄjumi ā klÄtbÅ«tne un intensitÄte. UnikÄlÄ Å”o harmoniku kombinÄcija ir tas, kas pieŔķir instrumentam tÄ raksturÄ«go skaÅas krÄsu.
BÅ«tiskÄkÄs Python bibliotÄkas audio analÄ«zei
Python spÄks slÄpjas tÄ plaÅ”ajÄ treÅ”o puÅ”u bibliotÄku kolekcijÄ. Audio analÄ«zei izceļas dažas.
- Librosa: Å Ä« ir galvenÄ bibliotÄka audio un mÅ«zikas analÄ«zei Python valodÄ. TÄ nodroÅ”ina plaÅ”u rÄ«ku komplektu audio ielÄdei, vizualizÄÅ”anai un plaÅ”a spektra augsta lÄ«meÅa iezÄ«mju, piemÄram, tempa, toÅa augstuma un hromatiskÄs reprezentÄcijas, iegūŔanai.
- SciPy: BÅ«tiska bibliotÄka zinÄtniskajÄ Python komplektÄcijÄ, SciPy satur spÄcÄ«gu `signal` moduli. TÄ ir lieliska zemÄka lÄ«meÅa DSP uzdevumiem, piemÄram, filtrÄÅ”anai, FurjÄ transformÄcijÄm un darbam ar spektrogrammÄm. TÄ arÄ« nodroÅ”ina vienkÄrÅ”u veidu, kÄ lasÄ«t un rakstÄ«t `.wav` failus.
- pydub: Augsta lÄ«meÅa, vienkÄrÅ”Äm manipulÄcijÄm `pydub` ir fantastiska. TÄ Ä¼auj griezt, savienot, pÄrklÄt un piemÄrot vienkÄrÅ”us efektus audio ar ļoti intuitÄ«vu API. TÄ ir lieliska priekÅ”apstrÄdes uzdevumiem.
- NumPy & Matplotlib: Lai arÄ« nav specifiskas audio, tÄs ir neaizstÄjamas. NumPy nodroÅ”ina fundamentÄlo datu struktÅ«ru (N-dimensiju masÄ«vu) audio datu glabÄÅ”anai, un Matplotlib ir standarts grafiku zÄ«mÄÅ”anai un vizualizÄcijai.
PraktiskÄ analÄ«ze: No viļÅa formÄm lÄ«dz atziÅÄm
Ķersimies pie darba. Vispirms pÄrliecinieties, ka esat instalÄjis nepiecieÅ”amÄs bibliotÄkas:
pip install librosa matplotlib numpy scipy
Jums bÅ«s nepiecieÅ”ams arÄ« audio fails, ar ko strÄdÄt. Å ajos piemÄros pieÅemsim, ka jums ir fails ar nosaukumu `audio_sample.wav`.
Audio ielÄde un vizualizÄÅ”ana
MÅ«su pirmais solis vienmÄr ir ielÄdÄt audio datus NumPy masÄ«vÄ. Librosa to padara neticami vienkÄrÅ”u.
import librosa
import librosa.display
import matplotlib.pyplot as plt
import numpy as np
# DefinÄjiet ceļu uz jÅ«su audio failu
file_path = 'audio_sample.wav'
# IelÄdÄjiet audio failu
# y ir audio laika rinda (numpy masīvs)
# sr ir diskretizÄcijas frekvence
y, sr = librosa.load(file_path)
# UzzÄ«mÄjiet viļÅa formu
plt.figure(figsize=(14, 5))
librosa.display.waveshow(y, sr=sr)
plt.title('Audio viļÅa forma')
plt.xlabel('Laiks (s)')
plt.ylabel('Amplitūda')
plt.grid(True)
plt.show()
Å is kods ielÄdÄ jÅ«su audio failu un attÄlo tÄ viļÅa formu. JÅ«s varat nekavÄjoties redzÄt ieraksta skaļÄkÄs un klusÄkÄs daļas laika gaitÄ.
FrekvenÄu satura atÅ”ifrÄÅ”ana: Spektrogramma
ViļÅa forma ir noderÄ«ga, bet spektrogramma sniedz mums daudz bagÄtÄ«gÄku skatu. Spektrogramma vizualizÄ signÄla spektru, kÄ tas mainÄs laika gaitÄ. HorizontÄlÄ ass attÄlo laiku, vertikÄlÄ ass attÄlo frekvenci, un krÄsa attÄlo konkrÄtas frekvences amplitÅ«du konkrÄtÄ laikÄ.
# AprÄÄ·iniet Ä«sÄ laika FurjÄ transformÄciju (STFT)
D = librosa.stft(y)
# PÄrveidojiet amplitÅ«du decibelos (intuitÄ«vÄka skala)
DB = librosa.amplitude_to_db(np.abs(D), ref=np.max)
# UzzÄ«mÄjiet spektrogrammu
plt.figure(figsize=(14, 5))
librosa.display.specshow(DB, sr=sr, x_axis='time', y_axis='log')
plt.colorbar(format='%+2.0f dB')
plt.title('LogaritmiskÄs frekvences jaudas spektrogramma')
plt.show()
Ar spektrogrammu jÅ«s burtiski varat redzÄt notis mÅ«zikas skaÅdarbÄ, formantus cilvÄka runÄ vai raksturÄ«go frekvenÄu signatÅ«ru maŔīnas dÅ«koÅai.
Nozīmīgu iezīmju iegūŔana
Bieži vien mÄs vÄlamies sarežģītu audio signÄlu reducÄt lÄ«dz dažiem skaitļiem vai vektoriem, kas raksturo tÄ galvenÄs Ä«paŔības. TÄs sauc par iezÄ«mÄm, un tÄs ir maŔīnmÄcīŔanÄs modeļu dzÄ«vÄ«bas avots audio jomÄ.
Nulles ŔķÄrsoÅ”anas biežums (ZCR): Tas ir biežums, ar kÄdu signÄls maina zÄ«mi (no pozitÄ«vas uz negatÄ«vu vai otrÄdi). Augsts ZCR bieži norÄda uz trokÅ”ÅainÄm vai perkusÄ«vÄm skaÅÄm (piemÄram, Ŕķīvjiem vai statisku troksni), savukÄrt zems ZCR ir raksturÄ«gs tonÄlÄm, melodiskÄm skaÅÄm (piemÄram, flautai vai dziedÄtam patskanim).
zcr = librosa.feature.zero_crossing_rate(y)
print(f"VidÄjais nulles ŔķÄrsoÅ”anas biežums: {np.mean(zcr)}")
SpektrÄlais centroÄ«ds: Å Ä« iezÄ«me attÄlo spektra "masas centru". Tas ir skaÅas spilgtuma mÄrs. Augsts spektrÄlais centroÄ«ds norÄda uz skaÅu ar lielÄku augstfrekvences saturu (piemÄram, trompeti), savukÄrt zems norÄda uz tumÅ”Äku skaÅu (piemÄram, Äellu).
spectral_centroids = librosa.feature.spectral_centroid(y=y, sr=sr)[0]
# SpektrÄlÄ centroÄ«da attÄloÅ”ana laika gaitÄ
frames = range(len(spectral_centroids))
t = librosa.frames_to_time(frames, sr=sr)
plt.figure(figsize=(14, 5))
librosa.display.waveshow(y, sr=sr, alpha=0.4)
plt.plot(t, spectral_centroids, color='r') # AttÄlot spektrÄlo centroÄ«du sarkanÄ krÄsÄ
plt.title('SpektrÄlais centroÄ«ds')
plt.show()
Mel-frekvences kepstrÄlie koeficienti (MFCCs): Å Ä«, iespÄjams, ir vissvarÄ«gÄkÄ iezÄ«me audio klasifikÄcijas uzdevumos, Ä«paÅ”i runas atpazīŔanÄ un mÅ«zikas žanru klasifikÄcijÄ. MFCC ir kompakts skaÅas Ä«stermiÅa jaudas spektra attÄlojums, kas balstÄ«ts uz logaritmiskÄ jaudas spektra lineÄru kosinusa transformÄciju nelineÄrÄ Mel frekvenÄu skalÄ. Tas izklausÄs sarežģīti, bet galvenÄ ideja ir tÄ, ka tie ir izstrÄdÄti, lai modelÄtu cilvÄka dzirdes uztveri, padarot tos ļoti efektÄ«vus uzdevumos, kur ir vÄlama cilvÄkam lÄ«dzÄ«ga izpratne.
mfccs = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=13)
# VizualizÄjiet MFCC
plt.figure(figsize=(14, 5))
librosa.display.specshow(mfccs, sr=sr, x_axis='time')
plt.colorbar()
plt.title('MFCCs')
plt.show()
ToÅa augstuma un tempa noteikÅ”ana
Librosa nodroÅ”ina arÄ« augsta lÄ«meÅa funkcijas specifiskai mÅ«zikas analÄ«zei.
Tempa un ritma noteikÅ”ana: MÄs varam viegli novÄrtÄt globÄlo tempu (sitienos minÅ«tÄ) un atrast ritma sitienu pozÄ«cijas audio ierakstÄ.
# NovÄrtÄjiet tempu un atrodiet ritma kadrus
tempo, beat_frames = librosa.beat.beat_track(y=y, sr=sr)
print(f'AprÄÄ·inÄtais temps: {tempo:.2f} sitieni minÅ«tÄ')
# PÄrveidojiet ritma kadrus laikÄ
beat_times = librosa.frames_to_time(beat_frames, sr=sr)
Å is ir tikai aisberga virsotne. Librosa piedÄvÄ desmitiem iezÄ«mju ritma, harmonijas un tonalitÄtes analÄ«zei, padarot to par neticami spÄcÄ«gu rÄ«ku MÅ«zikas informÄcijas izguvei (MIR).
2. daļa: RadīŔanas meistarÄ«ba: SkaÅas sintÄze ar Python
Ja analÄ«ze ir par lietu izjaukÅ”anu, tad sintÄze ir par to veidoÅ”anu no paÅ”iem pamatiem. Ar Python jÅ«s varat kļūt par digitÄlu vijolnieku, radot skaÅas, kas nekad agrÄk nav pastÄvÄjuÅ”as, un to visu ar dažÄm koda rindiÅÄm. GalvenÄ ideja ir Ä£enerÄt NumPy masÄ«vu ar vÄrtÄ«bÄm, kas, atskaÅojot, rada jÅ«su izstrÄdÄto skaÅas vilni.
SintÄzes pamatmetodes
Ir daudz veidu, kÄ sintezÄt skaÅu, katram ar savu raksturu. Å eit ir dažas fundamentÄlas pieejas.
- AditÄ«vÄ sintÄze: VisvienkÄrÅ”ÄkÄ un intuitÄ«vÄkÄ metode. Balstoties uz FurjÄ teorÄmu, tÄ apgalvo, ka jebkuru sarežģītu periodisku viļÅa formu var attÄlot kÄ vienkÄrÅ”u sinusa viļÅu (harmoniku) summu. Saskaitot sinusa viļÅus ar dažÄdÄm frekvencÄm, amplitÅ«dÄm un fÄzÄm, var izveidot neticami bagÄtÄ«gus un sarežģītus tembrus.
- SubtraktÄ«vÄ sintÄze: Å Ä« ir aditÄ«vÄs sintÄzes pretstats. JÅ«s sÄkat ar harmoniski bagÄtu viļÅa formu (piemÄram, taisnstÅ«ra vilni vai zÄÄ£zoba vilni) un pÄc tam izmantojat filtrus, lai izgrieztu jeb atÅemtu frekvences. Tas ir pamats lielÄkajai daļai klasisko analogo sintezatoru.
- FrekvenÄu modulÄcijas (FM) sintÄze: Ä»oti efektÄ«va un spÄcÄ«ga tehnika, kur viena oscilatora ("nesÄja") frekvenci modulÄ ar cita oscilatora ("modulatora") izvadi. Tas var radÄ«t ļoti sarežģītas, dinamiskas un bieži vien metÄliskas vai zvanveidÄ«gas skaÅas.
BÅ«tiskÄkÄs Python bibliotÄkas audio sintÄzei
SintÄzei mÅ«su rÄ«ku komplekts ir vienkÄrÅ”Äks, bet ne mazÄk spÄcÄ«gs.
- NumPy: Å is ir pats kodols. MÄs izmantosim NumPy, lai izveidotu un manipulÄtu ar skaitļu masÄ«viem, kas attÄlo mÅ«su skaÅas viļÅus. TÄ matemÄtiskÄs funkcijas ir bÅ«tiskas, lai Ä£enerÄtu viļÅu formas, piemÄram, sinusa, taisnstÅ«ra un trÄ«sstÅ«ra viļÅus.
- SciPy: MÄs izmantosim SciPy funkciju `scipy.io.wavfile.write`, lai saglabÄtu mÅ«su NumPy masÄ«vus standarta `.wav` audio failos, kurus var atskaÅot jebkurÅ” multivides atskaÅotÄjs.
PraktiskÄ sintÄze: SkaÅas radīŔana no koda
SÄksim radÄ«t skaÅu. PÄrliecinieties, ka jums ir gatavi SciPy un NumPy.
TÄ«ra toÅa (sinusa viļÅa) Ä£enerÄÅ”ana
VisvienkÄrÅ”ÄkÄ skaÅa, ko varam radÄ«t, ir tÄ«rs tonis, kas ir vienkÄrÅ”i sinusa vilnis ar noteiktu frekvenci.
import numpy as np
from scipy.io.wavfile import write
# --- SintÄzes parametri ---
sr = 44100 # DiskretizÄcijas frekvence
duration = 3.0 # sekundes
frequency = 440.0 # Hz (A4 nots)
# Ä¢enerÄjiet laika masÄ«vu
# Tas izveido skaitļu secÄ«bu no 0 lÄ«dz 'duration', ar 'sr' punktiem sekundÄ
t = np.linspace(0., duration, int(sr * duration), endpoint=False)
# Ä¢enerÄjiet sinusa vilni
# Sinusa viļÅa formula ir: amplitÅ«da * sin(2 * pi * frekvence * laiks)
amplitude = np.iinfo(np.int16).max * 0.5 # Izmantojiet pusi no maksimÄlÄs 16 bitu veselÄ skaitļa vÄrtÄ«bas
data = amplitude * np.sin(2. * np.pi * frequency * t)
# PÄrveidojiet par 16 bitu datiem un ierakstiet .wav failÄ
write('sine_wave_440hz.wav', sr, data.astype(np.int16))
print("Fails 'sine_wave_440hz.wav' veiksmÄ«gi Ä£enerÄts.")
Ja palaidÄ«siet Å”o kodu, tas izveidos `.wav` failu tajÄ paÅ”Ä direktorijÄ. Atveriet to, un jÅ«s dzirdÄsiet perfektu A4 noti!
SkaÅas veidoÅ”ana ar aploksnÄm (ADSR)
MÅ«su tÄ«rais tonis ir nedaudz garlaicÄ«gs; tas sÄkas un beidzas pÄkÅ”Åi. ReÄlÄs pasaules skaÅÄm ir dinamiska forma. MÄs to varam kontrolÄt, izmantojot aploksni. VisizplatÄ«tÄkais veids ir ADSR aploksne:
- UzsÄkums (Attack): Laiks, kas nepiecieÅ”ams, lai skaÅa pieaugtu no nulles lÄ«dz maksimÄlajam lÄ«menim.
- Kritums (Decay): Laiks, kas nepiecieÅ”ams, lai skaÅa nokristu no maksimÄlÄ lÄ«dz noturÄÅ”anas lÄ«menim.
- NoturÄÅ”ana (Sustain): LÄ«menis, kÄdÄ skaÅa tiek turÄta, kamÄr nots ir aktÄ«va.
- IzskaÅa (Release): Laiks, kas nepiecieÅ”ams, lai skaÅa izzustu lÄ«dz nullei pÄc nots atlaiÅ”anas.
Pielietosim vienkÄrÅ”u lineÄru uzsÄkumu un izskaÅu mÅ«su sinusa vilnim.
# --- Aploksnes parametri ---
attack_time = 0.1 # sekundes
release_time = 0.5 # sekundes
# Izveidojiet aploksni
attack_samples = int(sr * attack_time)
release_samples = int(sr * release_time)
sustain_samples = len(t) - attack_samples - release_samples
attack = np.linspace(0, 1, attack_samples)
# VienkÄrŔības labad izlaidÄ«sim kritumu un iestatÄ«sim noturÄÅ”anas lÄ«meni uz 1
sustain = np.ones(sustain_samples)
release = np.linspace(1, 0, release_samples)
envelope = np.concatenate([attack, sustain, release])
# Pielietojiet aploksni mÅ«su sinusa viļÅa datiem
enveloped_data = data * envelope
# Ierakstiet jauno skaÅu failÄ
write('enveloped_sine_wave.wav', sr, enveloped_data.astype(np.int16))
print("Fails 'enveloped_sine_wave.wav' veiksmÄ«gi Ä£enerÄts.")
Å Ä« jaunÄ skaÅa vienmÄrÄ«gi parÄdÄ«sies un maigi izzudÄ«s, padarot to daudz muzikÄlÄku un dabiskÄku.
SarežģītÄ«bas veidoÅ”ana ar aditÄ«vo sintÄzi
Tagad radÄ«sim bagÄtÄ«gÄku tembru, pievienojot harmonikas. PiemÄram, taisnstÅ«ra vilnis sastÄv no pamatfrekvences un visÄm tÄs nepÄra harmonikÄm ar amplitÅ«dÄm, kas proporcionÄli samazinÄs. MÄÄ£inÄsim to aptuveni izveidot.
# --- AditÄ«vÄ sintÄze ---
fundamental_freq = 220.0 # A3 nots
# SÄciet ar pamata toni
final_wave = np.sin(2. * np.pi * fundamental_freq * t)
# Pievienojiet nepÄra harmonikas
num_harmonics = 10
for i in range(3, num_harmonics * 2, 2):
harmonic_freq = fundamental_freq * i
harmonic_amplitude = 1.0 / i
final_wave += harmonic_amplitude * np.sin(2. * np.pi * harmonic_freq * t)
# NormalizÄjiet vilni, lai novÄrstu kropļojumus (amplitÅ«da > 1)
final_wave = final_wave / np.max(np.abs(final_wave))
# Pielietojiet mÅ«su iepriekÅ”Äjo aploksni
rich_sound_data = (amplitude * final_wave) * envelope
# Ierakstiet failÄ
write('additive_synthesis_sound.wav', sr, rich_sound_data.astype(np.int16))
print("Fails 'additive_synthesis_sound.wav' veiksmÄ«gi Ä£enerÄts.")
Noklausieties Å”o jauno failu. Tas skanÄs daudz bagÄtÄ«gÄk un sarežģītÄk nekÄ vienkÄrÅ”s sinusa vilnis, tuvojoties taisnstÅ«ra viļÅa dÅ«coÅ”ajai skaÅai. JÅ«s tikko veicÄt aditÄ«vo sintÄzi!
3. daļa: SimbiotiskÄs attiecÄ«bas: Kur analÄ«ze un sintÄze satiekas
Lai gan mÄs esam aplÅ«kojuÅ”i analÄ«zi un sintÄzi kÄ atseviŔķas tÄmas, to patiesais spÄks atklÄjas, kad tÄs tiek izmantotas kopÄ. TÄs veido atgriezeniskÄs saites cilpu, kurÄ izpratne veicina radīŔanu, un radīŔana nodroÅ”ina jaunu materiÄlu izpratnei.
Tilts starp pasaulÄm: ResintÄze
Viena no aizraujoÅ”ÄkajÄm jomÄm, kur abas satiekas, ir resintÄze. Process darbojas Å”Ädi:
- AnalizÄt: PaÅemt reÄlas pasaules skaÅu (piemÄram, vijoles ierakstu) un iegÅ«t tÄs galvenÄs akustiskÄs iezÄ«mes ā harmonisko saturu, toÅa augstuma svÄrstÄ«bas, amplitÅ«das aploksni.
- ModelÄt: Izveidot matemÄtisku modeli, pamatojoties uz Ŕīm iezÄ«mÄm.
- SintezÄt: Izmantot savu sintÄzes dzinÄju, lai Ä£enerÄtu jaunu skaÅu, pamatojoties uz Å”o modeli.
Tas ļauj jums izveidot ļoti reÄlistiskus sintÄtiskos instrumentus vai paÅemt vienas skaÅas Ä«paŔības un pielietot tÄs citai (piemÄram, likt Ä£itÄrai skanÄt tÄ, it kÄ tÄ "runÄtu", uzliekot tai cilvÄka balss spektrÄlo aploksni).
Audio efektu veidoŔana
Praktiski visi digitÄlie audio efekti ā reverbÄcija, aizture, kropļojums, horis ā ir analÄ«zes un sintÄzes apvienojums.
- Aizture/Atbalss: Å is ir vienkÄrÅ”s process. SistÄma analizÄ ienÄkoÅ”o audio, saglabÄ to buferÄ« (atmiÅas daļÄ) un pÄc tam sintezÄ to atpakaļ izvades straumÄ vÄlÄkÄ laikÄ, bieži ar samazinÄtu amplitÅ«du.
- Kropļojums: Å is efekts analizÄ ieejas signÄla amplitÅ«du. Ja tÄ pÄrsniedz noteiktu slieksni, tas sintezÄ jaunu izvadi, pielietojot matemÄtisku funkciju ("waveshaper"), kas apgriež vai maina viļÅa formu, pievienojot bagÄtÄ«gas jaunas harmonikas.
- ReverbÄcija: TÄ simulÄ fiziskas telpas skaÅu. Tas ir sarežģīts process, kurÄ tiek sintezÄti tÅ«kstoÅ”iem sÄ«ku, izzÅ«doÅ”u atbalsu (atstarojumu), kas tiek modelÄti, pamatojoties uz reÄlas telpas akustisko Ä«paŔību analÄ«zi.
Å Ä«s sinerÄ£ijas pielietojumi reÄlajÄ pasaulÄ
AnalÄ«zes un sintÄzes mijiedarbÄ«ba veicina inovÄcijas visÄ nozarÄ:
- Runas tehnoloÄ£ijas: Teksta-runas (TTS) sistÄmas sintezÄ cilvÄkam lÄ«dzÄ«gu runu, bieži apmÄcÄ«tas, dziļi analizÄjot milzÄ«gu daudzumu ierakstÄ«tas cilvÄka runas. SavukÄrt automÄtiskÄs runas atpazīŔanas (ASR) sistÄmas analizÄ lietotÄja balsi, lai to pÄrrakstÄ«tu tekstÄ.
- MÅ«zikas informÄcijas izguve (MIR): SistÄmas, piemÄram, Spotify, izmanto savu mÅ«zikas katalogu dziļo analÄ«zi, lai izprastu dziesmu iezÄ«mes (tempu, žanru, noskaÅu). Å o analÄ«zi pÄc tam var izmantot, lai sintezÄtu jaunus atskaÅoÅ”anas sarakstus vai ieteiktu mÅ«ziku.
- Ä¢eneratÄ«vÄ mÄksla un mÅ«zika: MÅ«sdienu mÄkslÄ«gÄ intelekta modeļi var analizÄt milzÄ«gas mÅ«zikas vai skaÅu datu kopas un pÄc tam sintezÄt pilnÄ«gi jaunus, oriÄ£inÄlus skaÅdarbus tajÄ paÅ”Ä stilÄ. Tas ir tieÅ”s "analizÄt-un-tad-sintezÄt" paradigmas pielietojums.
- SpÄļu audio: ProgresÄ«vi spÄļu audio dzinÄji sintezÄ skaÅas reÄllaikÄ. Tie var analizÄt spÄles fizikas dzinÄju (piemÄram, automaŔīnas Ätrumu) un izmantot Å”os parametrus, lai sintezÄtu atbilstoÅ”u dzinÄja skaÅu, radot perfekti atsaucÄ«gu un dinamisku audio pieredzi.
NoslÄgums: JÅ«su ceļojums digitÄlajÄ audio
MÄs esam ceļojuÅ”i no dekonstrukcijas lÄ«dz konstrukcijai, no skaÅas izpratnes lÄ«dz tÄs radīŔanai. MÄs esam redzÄjuÅ”i, ka skaÅas analÄ«ze nodroÅ”ina rÄ«kus, lai dziļi klausÄ«tos, kvantificÄtu audio Ä«slaicÄ«gÄs Ä«paŔības un pÄrvÄrstu tÄs datos. MÄs esam arÄ« redzÄjuÅ”i, ka skaÅas sintÄze sniedz mums skaÅu krÄsu paleti, lai no nekÄ, izÅemot matemÄtisku loÄ£iku, veidotu jaunas skaÅu pasaules.
GalvenÄ atziÅa ir tÄ, ka Å”ie nav pretÄji spÄki, bet gan vienas medaļas divas puses. LabÄkÄs audio lietojumprogrammas, visdziļÄkie pÄtÄ«jumi un radoÅ”Äkie mÄkslinieciskie centieni bieži atrodas Å”o divu jomu krustpunktÄ. IezÄ«mes, ko mÄs iegÅ«stam analÄ«zes ceļÄ, kļūst par parametriem mÅ«su sintezatoriem. SkaÅas, ko mÄs radÄm ar sintezatoriem, kļūst par datiem mÅ«su analÄ«zes modeļiem.
Ar Python un tÄ neticamo bibliotÄku ekosistÄmu, piemÄram, Librosa, SciPy un NumPy, ieejas slieksnis Ŕīs aizraujoÅ”Äs pasaules izpÄtei nekad nav bijis zemÄks. Å ajÄ rakstÄ sniegtie piemÄri ir tikai sÄkumpunkts. PatiesÄ aizrautÄ«ba sÄkas, kad jÅ«s sÄkat apvienot Ŕīs tehnikas, padodot vienas tehnikas rezultÄtu otras ievadÄ un uzdodot savus jautÄjumus par skaÅas dabu.
TÄtad, ielÄdÄjiet skaÅu, kas jÅ«s interesÄ. AnalizÄjiet tÄs spektru. MÄÄ£iniet sintezÄt skaÅu, kas to atdarina. TÅ«kstoÅ”iem skaÅu ceļojums sÄkas ar vienu koda rindiÅu.